package models

import (
	"gorm.io/gorm"
	"time"
)

// Train 车次表
type Train struct {
	gorm.Model
	TrainNumber   string `gorm:"unique;not null"` // 车次编号
	DepartureTime string // 始发站出发时间
	ArrivalTime   string // 终点站到达时间
	IsCrossRegion bool   `gorm:"default:0"` // 是否跨区域
}

// Station 车站表
type Station struct {
	gorm.Model
	StationName string `gorm:"unique;not null"` // 车站名称
	City        string `gorm:"not null"`        // 所属城市
	Region      string `gorm:"not null"`        // 区域
}

// TrainStop 列车停靠表
type TrainStop struct {
	gorm.Model
	TrainID       uint   `gorm:"not null"` // 外键关联车次
	StationID     uint   `gorm:"not null"` // 外键关联车站
	StopOrder     int    `gorm:"not null"` // 站点顺序
	ArrivalTime   string // 到站时间
	DepartureTime string // 离站时间
}

// TicketRoute 车票路线表
type TicketRoute struct {
	gorm.Model
	TrainID         uint    `gorm:"not null"` // 关联车次
	StartStationID  uint    `gorm:"not null"` // 起始站
	EndStationID    uint    `gorm:"not null"` // 终点站
	Price           float64 // 票价
	Date            string  // 日期
	DepartureRegion string  // 出发地区域
	ArrivalRegion   string  // 到达地区域
}

// Seat 座位表
type Seat struct {
	gorm.Model
	TrainID        uint   `gorm:"not null"` // 关联车次
	CarriageNumber string `gorm:"not null"` // 车厢号
	SeatNumber     string `gorm:"not null"` // 座位号
	SeatType       string `gorm:"not null"` // 座位类型
}

// SeatOccupancy 座位占用表
type SeatOccupancy struct {
	gorm.Model
	SeatID         uint   `gorm:"not null"` // 关联座位
	TrainID        uint   `gorm:"not null"` // 冗余存储加速查询
	StartStationID uint   `gorm:"not null"` // 占用起始站
	EndStationID   uint   `gorm:"not null"` // 占用结束站
	Date           string `gorm:"not null"` // 乘车日期
	UserID         uint   // 购票用户
	OrderID        string // 关联订单号
	Status         string `gorm:"default:'空闲'"` // 座位状态
	Version        int    `gorm:"default:0"`    // 乐观锁版本
}

// User 用户表
type User struct {
	gorm.Model
	Username string `gorm:"unique;not null"` // 用户名
	Password string `gorm:"not null"`        // 密码
	Role     uint8  `gorm:"not null"`        // 权限等级
}

// Order 订单主表
type Order struct {
	OrderID       uint      `gorm:"primaryKey;type:varchar(50);comment:订单号（业务生成，如O20240220123456）"`
	UserID        uint      `gorm:"not null;comment:关联用户ID"`
	TotalAmount   float64   `gorm:"type:decimal(10,2);not null;comment:订单总金额"`
	Status        string    `gorm:"type:enum('待支付', '已支付', '已退票', '已取消');default:'待支付';not null;comment:订单状态"`
	CreatedAt     time.Time `gorm:"default:CURRENT_TIMESTAMP;comment:创建时间"`
	UpdatedAt     time.Time `gorm:"default:CURRENT_TIMESTAMP;autoUpdateTime;comment:更新时间"`
	PaymentMethod string    `gorm:"type:varchar(20);comment:支付方式（如：支付宝/微信）"`
	PaymentID     string    `gorm:"type:varchar(255);comment:第三方支付平台交易号"`
}

// OrderSeat 订单座位关联表
type OrderSeat struct {
	OrderSeatID    uint      `gorm:"primaryKey;autoIncrement;comment:自增主键"`
	OrderID        uint      `gorm:"type:varchar(50);not null;comment:关联订单号"`
	SeatID         uint      `gorm:"not null;comment:关联座位ID"`
	StartStationID uint      `gorm:"not null;comment:出发站ID"`
	EndStationID   uint      `gorm:"not null;comment:到达站ID"`
	TravelDate     time.Time `gorm:"type:date;not null;comment:乘车日期"`
	Price          float64   `gorm:"type:decimal(10,2);not null;comment:该座位实际售价"`
}
